/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.gbvbahia.vendas.beans;

import br.com.gbvbahia.vendas.modelos.enums.StatusPedido;
import java.util.Calendar;
import java.util.Date;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

/**
 *
 * @author Guilherme
 */
@Stateless
public class ChartBean {

    @PersistenceContext(unitName = "VendasPU")
    private EntityManager em;
    
    public Double totalVendasPorPeriodo(Date data){
        Query q = em.createNamedQuery("ItensPedido.sumarizarPedidos");
        Date[] d = primeiroUltimoDia(data);
        q.setParameter("dataI", d[0]);
        q.setParameter("dataF", d[1]);
        q.setParameter("status", StatusPedido.FINALIZADO);
        try{
            return (Double) q.getSingleResult();
        }catch (NoResultException e){
            return 0.0d;
        }
    }
    
   /**
     * Retorna um array de java.util.Date com o primeiro dia do mês e o
     * ultimo dia do mês, com base na data de referência passada
     *
     * @param referencia
     * @return
     */
    public static Date[] primeiroUltimoDia(Date referencia) {
        Date[] toReturn = new Date[2];
        Calendar c1 = Calendar.getInstance();
        c1.setTime(referencia);
        c1.set(Calendar.DAY_OF_MONTH, 1);
        c1.set(Calendar.HOUR_OF_DAY, 00);
        c1.set(Calendar.MINUTE, 00);
        c1.set(Calendar.SECOND, 00);
        c1.set(Calendar.MILLISECOND, 0);
        toReturn[0] = c1.getTime();

        Calendar c2 = Calendar.getInstance();
        c2.setTime(referencia);
        c2.set(Calendar.DAY_OF_MONTH, c2.getActualMaximum(Calendar.DAY_OF_MONTH));
        c2.set(Calendar.HOUR_OF_DAY, 23);
        c2.set(Calendar.MINUTE, 59);
        c2.set(Calendar.SECOND, 59);
        c2.set(Calendar.MILLISECOND, 999);
        toReturn[1] = c2.getTime();
        return toReturn;
    }
}
